import { Response } from '../common';
import { Logger } from '../utils';

/**
 * ======================
 * resCode [Number]
 * 200 成功
 * 400 用户级别错误
 * 500 服务器级别错误
 * 511 校验级别错误
 */
export function pipe() {
    return async (ctx, next) => {
        try {
            await next()
            const status = ctx.status || 404
            if (status === 404) {
                ctx.throw(400);
            } else if (status === 500) {
                ctx.throw(500);
            }
        } catch (err) {
            if (err.module && err.module.name == "ServiceException") {
                ctx.body = Response.ServiveException(err);
                return;
            }
            else if (err.module && err.module.name == "AuthenticationException") {
                ctx.body = Response.ServiveException(err);
                return;
            }
            else if (err.module && err.module.name == "WebAPIException") {
                ctx.body = Response.ServiveException(err);
                return;
            }
            console.log("request error:",err);
            // koa : [err.status]
            // mongod : [err.errors]
            const status = err.status || 400
            if (status === 400) {
                ctx.throw(400);
            } else {
                ctx.app.emit('error', err, ctx)
            }
        }
        process.on('uncaughtException', (err) => {
            console.error('Unexpected Exception：', err);
            console.error(err.stack);
            new Logger().getLogger("app").info("server start at %d  pid - %d", process.env.port, process.pid);
        });
    }
}